#include<bits/stdc++.h>
#define fi first
#define se second
#define mk make_pair
#define pi pair<int,int>
using namespace std;
typedef long long ll;
inline int read()
{
    int x=0;char ch=getchar();
    while(!isdigit(ch)) ch=getchar();
    while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
    return x;
}
const int N=8010,M=2e6+10,Q=2e4+10;
int T,n,m,a[N],tx[N],ty[N];
int cnt,id[M],pri[M],num[M];
bool vis[M];
ll ans;
bitset<3010>b1[N],b2[N];
vector<pi>ned[M];
void shai()
{
    for(int i=2;i<M;i++)
    {
        if(!vis[i]) pri[++cnt]=i;
        for(int j=1,tmp;(tmp=i*pri[j])<M;j++)
        {
            vis[tmp]=1;
            if(!(i%pri[j])) break;
        }
    }
}
int dis(int x,int y) {return abs(tx[x]-tx[y])+abs(ty[x]-ty[y]);}
int Mid(int x,int y,int z)
{
    if(x>y) swap(x,y);
    if(y>z) swap(y,z);
    if(x>y) swap(x,y);
    return y;
}
int main()
{
    freopen("chess.in","r",stdin);
    freopen("chess.out","w",stdout);
    shai();
    int st=0;
    for(int i=1;i<=cnt;i++)
        if(pri[i]<=10||pri[i]%20==3) pri[++st]=pri[i];
    for(int i=1;i<=st;i++) id[pri[i]]=i;
    T=read();
    while(T--)
    {
        ans=0;
        n=read(),m=read();
        for(int i=1;i<=n;i++) tx[i]=read(),ty[i]=read();
        for(int i=1;i<=n;i++) a[i]=read(),b1[i]=b2[i]=0;
        if(n<=1e2)
        {
            for(int i=1;i<=n;i++)
                for(int j=i+1;j<=n;j++)
                    for(int k=j+1;k<=n;k++)
                        if(id[Mid(dis(i,j),dis(j,k),dis(i,k))]) ans+=(a[i]+a[j]+a[k]);
            printf("%lld\n",ans);
            continue;
        }
        for(int i=1;i<=n;i++)
            for(int j=i+1;j<=n;j++)
                b2[i][j]=b2[j][i]=1,++num[dis(i,j)];
        for(int i=1;i<M;i++)
            ned[i].resize(num[i]),num[i]=0;
        for(int i=1;i<=n;i++)
            for(int j=i+1,d;j<=n;j++)
                d=dis(i,j),ned[d][num[d]++]=mk(i,j);
        for(int i=1;i<M;i++)
            for(pi x:ned[i])
            {
                b1[x.fi][x.se]=b1[x.se][x.fi]=1;
                b2[x.fi][x.se]=b2[x.fi][x.se]=0;
                if(id[i]) ans+=3*(b1[x.fi]&b2[x.se]).count();
            }
        printf("%lld\n",ans);
        for(int i=1;i<M;i++) ned[i].clear(),num[i]=0;
    }
    return 0;
}